/**
 * AI对话相关API接口
 */

import request from '../utils/request.js'

export const aiApi = {
  /**
   * 发送AI对话消息（流式响应）
   * @param {Object} data - 消息数据
   * @param {string} data.question - 用户消息内容
   * @param {string} data.memoryId - 会话记忆ID（可选）
   * @param {number} data.userId - 用户ID（可选）
   */
  async sendMessage(data) {
    try {
      // 参数验证
      const question = data.question || data.message
      if (!question || question.trim() === '') {
        throw new Error('问题内容不能为空')
      }

      // 构建请求参数，过滤掉undefined值
      const params = {
        question: question.trim()
      }

      // 添加会话ID
      if (data.memoryId) {
        params.memoryId = data.memoryId
      }

      // 添加用户ID
      if (data.userId) {
        params.userId = data.userId
      }

      console.log('发送AI请求参数:', params)

      // 使用request工具发送请求，这样可以利用现有的拦截器和错误处理
      const response = await request.get('/aiserver/ai/chat', params)

      // 处理响应
      if (typeof response === 'string') {
        return response
      } else if (response && response.data) {
        return response.data
      } else {
        return String(response || '抱歉，我现在无法回复。')
      }

    } catch (error) {
      console.error('AI请求失败:', error)
      throw error
    }
  },

  /**
   * 获取AI对话历史
   * @param {Object} params - 查询参数
   * @param {string} params.conversationId - 会话ID
   * @param {number} params.userId - 用户ID
   * @param {number} params.page - 页码
   * @param {number} params.size - 每页数量
   */
  getChatHistory(params = {}) {
    const { conversationId, userId, page = 1, size = 20, descending = false } = params
    return request.get(`/aiserver/ai/conversation/${conversationId}/history`, {
      userId,
      page,
      size,
      descending
    })
  },

  /**
   * 创建新的AI对话会话
   * @param {Object} data - 会话数据
   * @param {number} data.userId - 用户ID
   * @param {string} data.title - 会话标题（可选）
   * @param {string} data.description - 会话描述（可选）
   * @param {string} data.initialMessage - 初始消息（可选）
   */
  createConversation(data = {}) {
    return request.post('/aiserver/ai/conversation', data)
  },

  /**
   * 获取AI对话会话列表
   * @param {Object} params - 查询参数
   * @param {number} params.userId - 用户ID
   * @param {number} params.page - 页码
   * @param {number} params.size - 每页数量
   * @param {boolean} params.includeArchived - 是否包含归档会话
   */
  getConversations(params = {}) {
    const { userId, page = 1, size = 20, includeArchived = false } = params
    return request.get('/aiserver/ai/conversations', {
      userId,
      page,
      size,
      includeArchived
    })
  },

  /**
   * 获取会话详情
   * @param {string} conversationId - 会话ID
   * @param {number} userId - 用户ID
   */
  getConversation(conversationId, userId) {
    return request.get(`/aiserver/ai/conversation/${conversationId}`, {
      userId
    })
  },

  /**
   * 删除AI对话会话
   * @param {string} conversationId - 会话ID
   * @param {number} userId - 用户ID
   */
  deleteConversation(conversationId, userId) {
    return request.delete(`/aiserver/ai/conversation/${conversationId}`, {
      params: { userId }
    })
  },

  /**
   * 更新会话标题
   * @param {string} conversationId - 会话ID
   * @param {number} userId - 用户ID
   * @param {string} title - 新标题
   */
  updateConversationTitle(conversationId, userId, title) {
    return request.put(`/aiserver/ai/conversation/${conversationId}/title`, null, {
      params: { userId, title }
    })
  },

  /**
   * 归档会话
   * @param {string} conversationId - 会话ID
   * @param {number} userId - 用户ID
   */
  archiveConversation(conversationId, userId) {
    return request.put(`/aiserver/ai/conversation/${conversationId}/archive`, null, {
      params: { userId }
    })
  },

  /**
   * 置顶/取消置顶会话
   * @param {string} conversationId - 会话ID
   * @param {number} userId - 用户ID
   */
  togglePinConversation(conversationId, userId) {
    return request.put(`/aiserver/ai/conversation/${conversationId}/pin`, null, {
      params: { userId }
    })
  },

  /**
   * 搜索会话
   * @param {Object} params - 搜索参数
   * @param {number} params.userId - 用户ID
   * @param {string} params.keyword - 搜索关键词
   * @param {number} params.page - 页码
   * @param {number} params.size - 每页数量
   */
  searchConversations(params = {}) {
    const { userId, keyword, page = 1, size = 20 } = params
    return request.get('/aiserver/ai/conversations/search', {
      userId,
      keyword,
      page,
      size
    }, { silent: true })
  },

  /**
   * 转人工服务
   * @param {Object} params - 转人工参数
   * @param {number} params.userId - 用户ID
   * @param {string} params.conversationId - 会话ID
   * @param {string} params.message - 转人工消息
   */
  transferToHuman(params = {}) {
    const { userId, conversationId, message = '用户请求转人工' } = params
    return request.post('/aiserver/ai/transfer-to-human', {
      userId,
      conversationId,
      message
    })
  },

  /**
   * 获取客服统计信息
   */
  getCustomerServiceStats() {
    return request.get('/aiserver/ai/customer-service/stats')
  }
}

export default aiApi
